import type { StyleValue } from "vue";
import type { Placement } from "@floating-ui/dom";

/**
 * 按钮尺寸类型（图标大小，支持数字如 20，或字符串如 "20px"、"20rem" 等）
 */
export type ButtonSize = number | string;

/**
 * 按钮变体类型
 */
export type ButtonVariant = "default" | "primary" | "secondary";

/**
 * Popover 位置类型
 */
export type PopoverPlacement = Placement;

/**
 * Popover 触发方式类型
 */
export type PopoverTrigger = "click" | "focus" | "hover" | "contextmenu";

/**
 * Button 组件 Props
 */
export interface ButtonProps {
  /** 图标类名 */
  icon?: string;
  /** 按钮提示文字 */
  title?: string;
  /** 是否隐藏文本 */
  hideText?: boolean;
  /** 快捷键 */
  shortcut?: string;
  /** 自定义提示内容（如果提供，将优先使用此值） */
  tooltip?: string;
  /** 是否是大图标 */
  largeIcon?: boolean;
  /** 是否禁用 */
  disabled?: boolean;
  /** 是否激活状态 */
  active?: boolean;
  /** 按钮变体样式 */
  variant?: ButtonVariant;
  /** 是否为圆角按钮 */
  round?: boolean;
  /** 是否为圆形按钮 */
  circle?: boolean;
}

/**
 * Select 组件 Props
 */
export interface SelectProps {
  /** Select 的值 */
  modelValue?: any;
  /** 占位符 */
  placeholder?: string;
  /** 选项列表 */
  options?: SelectOption[];
  /** 是否可清空 */
  clearable?: boolean;
  /** 是否可搜索 */
  filterable?: boolean;
  /** 是否多选 */
  multiple?: boolean;
  /** Select 宽度 */
  selectWidth?: string;
  /** 是否禁用 */
  disabled?: boolean;
  /** 按钮尺寸 */
  size?: ButtonSize;
}

/**
 * 选择器选项接口
 */
export interface SelectOption {
  label: string;
  value: any;
  disabled?: boolean;
}

/**
 * Popover 组件 Props
 */
export interface PopoverProps {
  /** Popover 位置 */
  placement?: PopoverPlacement;
  /** Popover 宽度 */
  width?: string | number;
  /** Popover 触发方式 */
  trigger?: PopoverTrigger;
  /** Popover 自定义类名 */
  popperClass?: string;
  popperStyle?: StyleValue;
  /** 是否禁用 */
  disabled?: boolean;
}

/**
 * Dropdown 组件 Props
 */
export interface DropdownProps {
  /** Dropdown 位置 */
  placement?: PopoverPlacement;
  /** Dropdown 触发方式 */
  trigger?: "click" | "hover";
  /** 是否禁用 */
  disabled?: boolean;
  /** 是否隐藏文本 */
  hideText?: boolean;
  /** 下拉箭头图标 */
  dropdownIcon?: string;
  /** 自定义类名 */
  customClass?: string;
  /** 自定义样式 */
  customStyle?: StyleValue;
}